# @Time    :2025/3/31 18:30
# @property  将方法转换为属性
"""
class Person:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(f"{self.name}eats")


p1=Person("张华")
print(p1.name)
p1.eat()
"""
"""
# 默认情况下，当调用实例方法的时候，必须 对象.方法名(),哪怕没有参数，括号也不能省略
# zsf.eat()

# 如果在方法上加了@property注解(将方法转换为属性)，那么在调用实例方法的时候，直接通过对象.方法名   后面的括号不用加
zsf.eat

"""
# --------通过@property注解转为 读属性eat-------------------
# class Person:
#     def __init__(self, name):
#         self.name = name
#
#     @property
#     def eat(self): #没有参数 没有返回值
#         print(f"{self.name}eats")
#
#
# p1 = Person("张华")
# print(p1.name)
# p1.eat

"""

#---------通过访问一个方法（return 私有属性） 来访问私有属性----
#通过@property注解实现只读属性
class Person:
    def __init__(self, name):
        self.__name = name

    def get_name(self):
        return  self.__name

p1 = Person("张华")
print(p1.get_name())
"""


# --------通过@property注解转为 只读属性-------------------
# 通过@property注解实现只读属性
class Person:
    def __init__(self, name):
        self.__name = name

    def get_name(self):
        return self.__name

    @property
    def name(self):
        if self.__name == "张华":
            print("换个名字")
            self.__name = "zzzzzz"
        return self.__name

    @name.setter
    def name(self, name):
        if name == "张华":
            name = "aaa"

        else:
            print("你输入的不对")
        self.__name = name


p1 = Person("张华1")
print(p1.get_name())

#私有化属性不能直接在外边进行访问
#print(p1.__name)

#可以提供专门的方法 对私有属性进行访问，将结果返回给调用者
print(p1.name)

print(p1._Person__name)#_Person__name是实例属性，所以需要实例对象去调用

print("+++++++++++++")
#调用@name.setter改名字
p1.name="张宝宝"
print("---",p1.name)

p1.name="张华"
print("======",p1.name)